package org.osiris.server;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.apache.log4j.Logger;
import org.osiris.client.model.UsuarioViewBean;
import org.osiris.persistence.Usuario;
import org.osiris.persistence.controllers.impl.UsuarioJpaController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.context.SecurityContextHolder;

import com.google.gwt.core.client.GWT;

/**
 * {@link AuthenticationService} implementation.
 * 
 * @author See Wah Cheng
 * @created 5 Jun 2009
 */
public class AuthenticationServiceImpl implements AuthenticationService {

	SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
	@Autowired
	UsuarioJpaController UsuarioJpaController;
	Logger logger=Logger.getLogger(this.getClass());
	
	public UsuarioViewBean authenticate(String username, String password) {
		UsuarioViewBean u=null;
		
		
		EntityManager em = UsuarioJpaController.getEntityManager();
		Query qu = em.createNativeQuery("SELECT * FROM Usuario u WHERE u.email = :email", Usuario.class);
		qu.setParameter("email", username);
		Usuario user = (Usuario) qu.getSingleResult();
		if(user!=null){
			u=new UsuarioViewBean();
			u.setemail(user.getEmail());
			u.setnombre(user.getNombre());
			u.setprimerApellido(user.getPrimerApellido());
			u.setsegundoApellido(user.getSegundoApellido());
			u.setidUsuario(user.getIdUsuario());
			u.setperfil(user.getPerfil());
			List<String> lista=new ArrayList<String>();
			List<String> listareq=new ArrayList<String>();
			for(int x=0;x<user.getProyectoList().size();x++){
				lista.add(user.getProyectoList().get(x).getIdProyecto().toString());
			}
			
			u.setproyectos(lista);
			for(int x=0;x<user.getRequisitoList().size();x++){
				listareq.add(user.getRequisitoList().get(x).getIdRequisito().toString());
			}
			u.setrequisitosdeproyectoResponsable(listareq);
			u.settelefono(user.getTelefono());
		}
		return u;


	}

	public void logout() {
		GWT.log("Logout:");
		
		SecurityContextHolder.clearContext();
	}

}
